上一篇我們簡單的介紹了 AutoMapper
的方法,今天我們要進一步使用 Profile
將對應關係集中,以及.NET Core 中依賴注入(DI)AutoMapper。
依照我們的架構 NetCoreDemo.Utility
會有一個 Mappings
資料夾專門放 AutoMapper 對應的設定。
接著我們來建立一個繼承 AutoMapper 的 Profile 的 Mapping。
namespace NetCoreDemo.Utility.Mappings
{
public class UserMapping : Profile
{
public UserMapping()
{
CreateMap<UserDTO, UserViewModel>();
}
}
}
接者我們可以使用 AddProfile
和剛剛建立的 Profile 來直接 Mapping
public IEnumerable<UserViewModel> GetUser(UserDTO m)
{
var data = GetUserByAccName(m);
var config = new MapperConfiguration(cfg => cfg.AddProfile<UserViewModel>());
var mapper = config.CreateMapper();
var result = mapper.Map<IEnumerable<UserViewModel>>(data);
return result;
}
NuGet 安裝 AutoMapper.Extensions.Microsoft.DependencyInjection
Program.cs
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //找到全部Profile
註冊完成後,我們就能使用注入的方式來取得 Mapper,程式最終簡化如下
private readonly IMapper _mapper;
public UserService(IMapper mapper)
{
_mapper = mapper;
}
public IEnumerable<UserViewModel> GetUser(UserDTO m)
{
var data = GetUserByAccName(m);
var result = _mapper.Map<IEnumerable<UserViewModel>>(data);
return result;
}
是不是覺得變得超級簡潔!!再次推推AutoMapper
那今天就到這邊囉,大家明天見!